launcher: clipboard history & emoji picker#1298
Conversation
- Clipboard history list as '>clipboard' action
- IPC command 'caelestia shell clipboard toggle'
- Persistent pinning of history items
- Preview container for images
- Emoji picker grid as 'emoji' action
- IPC command 'caelestia shell emoji toggle'
- Categories and frequently used
- Grid view with arrowkey navigation
- Preview pane
- smart switch between key nav and hover for previewing item
- Embeds stored html img tags, with copy button for binary
- omits displaying if source 404's
- Ducks out of the way for sidepanel and utilities drawers
- Cliphist categories (All, Images, Misc)
- Item count per category
- Clear all button, restricted to in current category & non-pinned
- Confirmation modal for deletion
… panel transitions
…n, LauncherWrappers for prefilling text
|
Something I have noticed is that while I did originally handle opening launcher with specific text working fine in most cases, more complex layouts like with the navbar started making things a bit finicky with IPC to open. The latter I managed to rework a bit to where it would only do so sometimes, and the only working attempt to fix that was to add a retarget timer, which effectively just waits to animate in those edgecases. |
|
i desperately needed this thanks for implementing @PixelKhaos, it works perfectly! However could we store the pinnedClipboardItems and frequentEmojis in some file in .local/state instead of the main config file? Another thing is the ipc cmd, i think instead of having one for clipboard and another for emoji, we could just have 1 that would accept a string argument that will open the launcher pre-filled with the input. this would make keybinds for the launcher more customizable Other than this, thanks again! i will be using your fork until its merged to main haha |
That I can look into yeah, I was using the json because it's all a pretty limited list of id's etc and easy way of storing it, but absolutely makes sense to store elsewhere as a temp.
You mean allowing a bind like |
no sir, i meant something like caelestia shell launcher >emoji so they can use with other launcher modules |
Oh you mean so it's in place to be useful for other/new launcher actions! |
|
@chea-vuthearith combined the two IPCs into one launcherHandler includes open, toggle and action. Action is the same as toggle, just including the prefix from config, and Open doesn't toggle launcher off if pressed again. e.g., |
Awesome work @PixelKhaos thanks I noticed another thing, after i selected something in the clipboard menu and open it up again it seems the selected idx doesnt reset but +1 from the prev recording_20260323_11-56-06.mp4so initially selected idx is 0 now its 1 now its 2 and so on |
Oh right, because we move the copied item to the top as it's the latest entry |
|
Hope im not being too annoying HAHA. but i noticed another thing, when using keyboard to navigate the clipboard menu, previews for the images dont show up |
It should, but you may have your mouse hovering an item at the same time, so when the list shifts it might count the mouse as the last interaction method |
Ah yes, you're correct. false alarm then |
|
Fixed transitioning between emoji picker and clipboard history when using IPC to toggle each, now holds the height during transitioning contents and then adjusts height instead of animating back to 0 because there's no content. Moved clipboard nav bar to transition along with list rather than it's own height, and overall a stab at getting multiple different layouts/UI to play nicer within the launcher |

Clipboard history UI
">clipboard some words"IPC with
caelestia shell clipboard toggleEmoji picker
">emoji grinning face"IPC with
caelestia shell emoji togglerecording_20260317_08-57-26.mp4
Add the commands in shell.json, under config.launcher.actions
{ "command": [ "autocomplete", "clipboard" ], "dangerous": false, "description": "Browse clipboard history", "enabled": true, "icon": "content_paste", "name": "Clipboard" }, { "command": [ "autocomplete", "emoji" ], "dangerous": false, "description": "Pick an emoji", "enabled": true, "icon": "sentiment_satisfied", "name": "Emoji" }